// 链式队列也比较简单，得益于链表的长度是无上限的
// 可以使用单链表也可以使用双向链表，下面实现单链表，循环队列时使用双向链表

// 创建链表
class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

class Queue {
  _size = 0;
  _head = null;
  _tail = null;

  // 入栈
  push(data) {
    const node = new Node(data);
    if (!data) {
      return;
    }
    if (this._size === 0) {
      this._head = node;
      this._tail = node;
    } else {
      this._tail.next = node;
      this._tail = node;
    }
    this._size++;
  }

  // 出栈
  pop() {
    if (this._size === 0) {
      return;
    }

    const item = this._head.data;

    if (this._size === 1) {
      this._head = null;
      this._tail = null;
    } else {
      this._head = this._head.next;
    }
    this._size--;

    return item;
  }

  getSize() {
    return this._size;
  }

  print() {
      if (this._size === 0) {
          console.log("空队列");
          return;
      }

      let node = this._head;
      while(node) {
          console.log(node.data);
          node = node.next;
      }
  }

}

const linkQueue = new Queue();

linkQueue.push(1);
linkQueue.push(2);

linkQueue.print();
console.log("-------");

linkQueue.pop();

linkQueue.print();
console.log("------");
linkQueue.pop();

linkQueue.print();
linkQueue.print();



